package demo2;
//场景：演示内存不可见

import java.util.Scanner;

/**
 * 第一个线程：不断的循环执行任务，判断条件为flag==0
 * 第二个线程：在第一个线程不断运行的时候，把flag修改为别的值
 *
 * t2，将flag修改为了1后刷回了主内存，并且退出了，t1，已经将flag的值读到了缓存中
 * 由于编译器会自动优化，他认为这个flag值不会变，他不会再从主内存中读取flag的值，而是一直在缓存中读取flag的值，
 * 导致他一直认为flag的值一直是1
 */
public class DEMO_00 {
    static int flag = 0;
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            System.out.println("t1线程启动");
            while (flag == 0) {
            }
            System.out.println("t1线程结束");
        });

        Thread t2 = new Thread(() -> {
            System.out.println("t2线程启动");
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入一个非零整数");
            flag = scanner.nextInt();
            System.out.println("t2线程结束");
        });
        //启动线程
        t1.start();
        t2.start();
    }
}
